Network devices typically use routing tables to direct traffic within a computer network based on address prefixes. That is, the table stores the prefixes and a “best route” (based on various factors) over which to route any received packets destined to an address within that prefix. Generally, there is little or no consideration of the volume and performance of the traffic being directed within routing tables, and the “best route” decisions are made on static factors. In particular, applying a routing policy to a prefix may benefit the performance of certain hosts/subnets within the prefix, while degrading the performance of others. If the address prefix contains too many hosts (e.g., a large prefix-length or “mask,” encompassing many host addresses), load balancing may be difficult. Conversely, if a prefix is too granular (e.g., a small prefix-length or “mask,” encompassing few host addresses), more prefixes are used to cover the possible addresses in the routing tables, thus consuming substantial table size.